#ifndef GAME_HPP
#define GAME_HPP
#include "board.hpp"
#include <fstream>

namespace gomoku{

    enum class player{ // 表示一个玩家
        nobody,
        black,
        white
    };

    class game{
        private:

        protected:
            int _status=0; // 当前游戏的状态，i.e.轮到谁走棋
            bool _undone=true; // 记录玩家上一次是否进行悔棋操作
        public:
            virtual inline int game_mode() const=0; // 表示该类对应的游戏模式
            inline int status() const{
                return _status;
            }
            game(int height, int width); // 新建一个空棋盘的游戏
            game(int height, int width,int init_status, point_status *init_layout); // 读取已有的棋盘布局并创建游戏，用于读取已经保存的游戏
            gomoku::board board; // 游戏中的棋盘
            virtual player winner() const=0; // 返回胜利的玩家
            void save(std::ofstream &outfile) const; // 保存游戏
            virtual bool do_operation(point position)=0; // 由前端指定一个操作时调用，返回操作成功与否
            virtual bool undo_operation()=0; // 悔棋，返回操作成功与否
    };

}

#endif